/**
 * @file	sbpProfile_ota.c
 * @author	chipsea
 * @brief	This file contains the Simple GATT profile definitions and
 *			prototypes.
 * @version	0.1
 * @date	2020-11-30
 * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd.
 * @note
 */
#ifndef SBPPROFILE_OTA_H
#define SBPPROFILE_OTA_H

#ifdef __cplusplus
extern "C"
{
#endif

/*********************************************************************
 * INCLUDES
 */

/*********************************************************************
 * CONSTANTS
 */

///< Profile Parameters
#define SIMPLEPROFILE_CHAR1				0  ///< RW uint8 - Profile Characteristic 1 value 
#define SIMPLEPROFILE_CHAR2				1  ///< RW uint8 - Profile Characteristic 2 value
#define SIMPLEPROFILE_CHAR3				2  ///< RW uint8 - Profile Characteristic 3 value
#define SIMPLEPROFILE_CHAR4				3  ///< RW uint8 - Profile Characteristic 4 value
#define SIMPLEPROFILE_CHAR5				4  ///< RW uint8 - Profile Characteristic 4 value
#define SIMPLEPROFILE_CHAR6				5  ///< RW uint8 - Profile Characteristic 4 value
#define SIMPLEPROFILE_CHAR7				6  ///< RW uint8 - Profile Characteristic 4 value
  
///< Simple Profile Service UUID
#define SIMPLEPROFILE_SERV_UUID			0xFFF0
    
///< Key Pressed UUID
#define SIMPLEPROFILE_CHAR1_UUID		0xFFF1		//iBeacon UUID
#define SIMPLEPROFILE_CHAR2_UUID		0xFFF2		//iBeacon Major
#define SIMPLEPROFILE_CHAR3_UUID		0xFFF3		//iBeacon Minor
#define SIMPLEPROFILE_CHAR4_UUID		0xFFF4		//iBeacon Power
#define SIMPLEPROFILE_CHAR5_UUID		0xFFF5		//Control
#define SIMPLEPROFILE_CHAR6_UUID		0xFFF6		//Notify Test
#define SIMPLEPROFILE_CHAR7_UUID		0xFFF7		//Write Test
  
///< Simple Keys Profile Services bit fields
#define SIMPLEPROFILE_SERVICE			0x00000001

///< Length of Characteristic 5 in bytes
//#define SIMPLEPROFILE_CHAR5_LEN		5  
#define IBEACON_UUID_LEN				16
#define IBEACON_ATT_LONG_PKT			251
/*********************************************************************
 * TYPEDEFS
 */
typedef struct
{
    uint32 cnt;
    uint32 miss;
    uint32 err;
}wtnrTest_t;
  
/*********************************************************************
 * MACROS
 */

/*********************************************************************
 * Profile Callbacks
 */

///< Callback when a characteristic value has changed
typedef void (*simpleProfileChange_t)( uint8 paramID, uint8 paramLen );

typedef struct
{
  simpleProfileChange_t        pfnSimpleProfileChange;  ///< Called when characteristic value changes
} simpleProfileCBs_t;

    

/*********************************************************************
 * API FUNCTIONS 
 */


/**
 * @fn		bStatus_t SimpleProfile_AddService( uint32 services )
 * @brief	Initializes the Simple Profile service by registering
 *          GATT attributes with the GATT server.
 * @param	services - services to add. This is a bit map and can
 *                     contain more than one service.
 * @return	Success or Failure
 */
extern bStatus_t SimpleProfile_AddService( uint32 services );

/**
 * @fn		bStatus_t SimpleProfile_RegisterAppCBs( simpleProfileCBs_t *appCallbacks )
 * @brief	Registers the application callback function. Only call 
 *          this function once.
 * @param	callbacks - pointer to application callbacks.
 * @return	SUCCESS or bleAlreadyInRequestedMode
 */
extern bStatus_t SimpleProfile_RegisterAppCBs( simpleProfileCBs_t *appCallbacks );

/**
 * @fn		bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )
 * @brief	Set a Simple Profile parameter.
 * @param	param - Profile parameter ID
 * @param   len - length of data to right
 * @param   value - pointer to data to write.  This is dependent on
 *          the parameter ID and WILL be cast to the appropriate 
 *          data type (example: data type of uint16 will be cast to 
 *          uint16 pointer).
 * @return	bStatus_t
 */
extern bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value );

/**
 * @fn		bStatus_t SimpleProfile_GetParameter( uint8 param, void *value )
 * @brief	Get a Simple GATT Profile parameter.
 * @param	param - Profile parameter ID
 * @param	value - pointer to data to write.  This is dependent on
 *					the parameter ID and WILL be cast to the appropriate 
 *					data type (example: data type of uint16 will be cast to 
 *					uint16 pointer).
 * @return	bStatus_t
 */
extern bStatus_t SimpleProfile_GetParameter( uint8 param, void *value );

/**
 * @fn		bStatus_t simpleProfile_Notify( uint8 param, uint8 len, void *value )
 * @brief	
 * @param	param - connection handle
 * @param   len - type of change
 * @param	value
 * @return	bStatus_t
 */
extern bStatus_t simpleProfile_Notify( uint8 param, uint8 len, void *value );
/*********************************************************************
*********************************************************************/

#ifdef __cplusplus
}
#endif

#endif /* SIMPLEGATTPROFILE_H */
